#ifndef __MAIN_AUX_HEADER__
#define __MAIN_AUX_HEADER__
#include "model.h"
#include "datatypes.h"
#include "netcdfaux.h"
#include "mexAux.h"
#include <stdio.h>
#include <readline/readline.h>
#include <readline/history.h>
// ---------------------------------------------------------------------------------------------- //
// Globals ::
// ---------------------------------------------------------------------------------------------- //

bool gnuplot_write_static_coeffs(model_class & mo, const char * fname, bool overwrite, 
		const static_container * Rs, 
		const static_container * Ss);

double muParse_dumpAiterators(const double * args, int numargs);
double muParse_getQ(const double * args, int numargs);

double muParse_printQ(double);
double muParse_printProfile(const char *);

model_class & getModel();
vector<string> & getuserdefinedfuncnames();
ParserX & getParser();
void print3Matrix(const model_class & model, const REAL * Q, const unsigned int numk, const INDEX m, const INDEX n);
void printMOMacros(const model_class & model, qstream fout);
void printMOParams(const model_class & model, qstream fout );
void printMOProfiles(const model_class & model, qstream fout );
void printMOfields(const model_class & model, FILE * fout );
void printMOfunctions(const model_class & model, FILE * fout );
void printMOvariables(const model_class & model, FILE * fout );
void printMOlinearops(const model_class & model, FILE * fout );
void printMOdissipops(const model_class & model, FILE * fout );
void printA(const model_class & model,const REAL * A, const rank6 * Aindexmap, const int Asize);
double muParse_dumpAiterators(const double * args, int numargs);
double muParse_getQ(const double * args, int numargs);
double muParse_printQ(double k);
double muParse_printProfile(const char * name);
bool gnuplot_write_static_coeffs(model_class & mo, const char * fname, bool overwrite, qgcomplex * Rs, qgcomplex * Ss,	
		rank11 * index_map, const unsigned int & map_size);
#endif
